package com.haixiaoke.saas.lock.service;

import com.haixiaoke.saas.common.core.domain.AjaxResult;
import com.haixiaoke.saas.lock.domain.LockFace;

import java.util.List;

/**
 * 锁人脸授权Service接口
 *
 * @author panda
 * @date 2025-04-02
 */
public interface ILockFaceService {
    /**
     * 查询锁人脸授权
     *
     * @param faceId 锁人脸授权主键
     * @return 锁人脸授权
     */
    LockFace selectLockFaceByFaceId(Long faceId);

    /**
     * 查询锁人脸授权列表
     *
     * @param lockFace 锁人脸授权
     * @return 锁人脸授权集合
     */
    List<LockFace> selectLockFaceList(LockFace lockFace);

    /**
     * 新增锁人脸授权
     *
     * @param lockFace 锁人脸授权
     * @param loginUserId 登录用户的id
     * @return 结果
     */
    AjaxResult insertLockFace(LockFace lockFace, Long loginUserId);
    AjaxResult manageInsertLockFace(LockFace lockFace);
    int insertLockFace(LockFace lockFace);

    /**
     * 修改锁人脸授权
     *
     * @param lockFace 锁人脸授权
     * @return 结果
     */
    AjaxResult updateLockFace(LockFace lockFace, Long loginUserId);

    /**
     * 批量删除锁人脸授权
     *
     * @param faceIds 需要删除的锁人脸授权主键集合
     * @return 结果
     */
     int deleteLockFaceByFaceIds(Long[] faceIds);

    /**
     * 删除锁人脸授权信息
     *
     * @param faceId 锁人脸授权主键
     * @param loginUserId 登录用户的id
     * @return 结果
     */
     AjaxResult deleteLockFaceByFaceId(Long faceId, Long loginUserId, String userName);

     /**
     * 根据锁id和用户名称查询锁人脸授权
     * @param lockId 锁id
     * @param userName 用户名称
     * @return 锁人脸授权
     */
    LockFace selectLockFaceByLockIdAndUserName(Long lockId, String userName);

    /**
     * 根据开锁标识查询锁人脸授权和密码授权信息
     * @param identifications 开锁标识集合
     */
    List<LockFace> selectLockListByIdentifications(List<String> identifications);

    /**
     * 修改锁的主管理员
     */
    AjaxResult updateLockMainAdmin(LockFace lockFace, Long loginUserId);

    /**
     * 根据锁id和用户id查询锁人脸授权
     * @param lockId
     * @param userId
     * @return
     */
    LockFace selectLockFaceByLockIdAndUserId(Long lockId, Long userId);

    /**
     * 人脸授权禁用/启用
     * @param faceId
     * @param loginUserId
     * @return
     */
    AjaxResult editFaceState(Long faceId, Long loginUserId);

    /**
     * 根据用户id和身份类型标识查询锁人脸授权
     * @param authRoleType
     * @param userId
     * @return
     */
    List<LockFace> selectLockFaceByAuthRoleTypeAndUserId(String authRoleType, Long userId);

    /**
     * 根据用户id查询锁人脸授权
     * @param userId
     * @return
     */
    List<LockFace> selectLockFaceByUserId(Long userId);

    LockFace selectLockFaceByLockIdByMainAdmin(Long lockId);

    /**
     * 根据用户id删除锁人脸授权
     * @param userId
     * @return
     */
    int softDeleteLockFaceByUserId(Long userId);

    int softDeleteLockFaceByLockId(Long lockId);

    AjaxResult checkParam(LockFace lockFace);

    int insertBatchLockFace(List<LockFace> lockFaceList);

    /**
     * 查询锁人脸授权及主管理员
     */
    List<LockFace> userIdRelevanceDevice(LockFace lockFace);

}
